package cn.bonoon.kernel.io;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * 可以定义在{@link StoragePersistable}实体上面，用来指明这个数据库表的默认路径和存储文件的名称；
 * 如：个人相册等名称
 * 必须与{@link StoragePersistable}一起使用才有效
 * 
 * @author jackson
 *
 */
@Target(TYPE)
@Retention(RUNTIME)
public @interface StorageCatalog {
	
	/** 文件的名称，维护的时候可以直接显示给操作人员看的名称 */
	String title() default "";
	
	/** 指定一个存储的分类，这个分类与其它上传的文件可以相同，即如何在硬盘上存储 */
	String value() default "";
	
	/** 
	 * 每一个用于存储文件的表，都可以定义一个唯一的key；可以用于内部或外部系统通过key + id的方式来读取文件 
	 * 这个字段应该尽量是不可识别的，由计算机来处理
	 * */
	String key() default "";
	
	/** 使用指定的目录 */
	String[] folders() default {};
	
	/** 默认的情况下，在生成文件夹的顺序：{@link DirectoryStrategy} + {@link #folders()};
	 * 如果指定了反转，则生成文件夹的顺序：{@link #folders()} + {@link DirectoryStrategy}; */
	boolean reversed() default false;
	
	/** 文件夹的生成规则 */
	DirectoryStrategy directoryStrategy() default DirectoryStrategy.YEAR_MONTH_DAY;
	
	FilenameStrategy filenameStrategy() default FilenameStrategy.MD5;
}
